package com.mc.linkerlist;

import java.util.LinkedList;

/**
 * @Description: 双链表
 * @Author: MoChen
 */
public class HDLinkedList {

    // 链表的头结点
    HDNode head = null;

    // 初始化一个空链表
    boolean InitList(HDLinkedList L){
        L.head = new HDNode(); // 分配一个头结点,如果不带头结点此处直接赋空
        L.head.prior = null; // 头结点的prior永远指向空
        L.head.next = null; // 头结点之后暂时没有结点
        return true;
    }

    // 在p结点之后插入s结点
    boolean InsertNextHDNode(HDNode p, HDNode s){
        if(p == null || s == null){ // 非法参数
            return false;
        }
        s.next = p.next;
        if(p.next != null){ // 如果p后面有结点
            p.next.prior = s;
        }
        s.prior = p;
        p.next = s;
        return true;
    }

    // 删除p结点的后继结点
    boolean DeleteNextNode(HDNode p){
        if(p == null){
            return false;
        }
        HDNode q = p.next; // 找到p的后继结点q
        if(q == null){
            return false; // p没有后继
        }
        p.next = q.next;
        if(q.next != null){ // q结点不是最后一个结点
            q.next.prior = p;
        }
        return true;
    }

    // 求表的长度
    int Length(HDLinkedList L){
        int len = 0;
        HDNode p = L.head;
        while(p.next != null){
            p = p.next;
            System.out.println("链表第" + len + "个数据:" + p.data);
            len++;
        }
        return len;
    }
}
